<?php

class IngresosController extends AppController {

    var $components = array('Cookie', 'Idioma');
    var $name = 'Ingresos';
    var $uses = array('Person', 'Turn', 'Agenda', 'Typodocument', 'InsurancesPerson','ClientsPerson','Specialty','Sucursal','SucursalsUser','User','Product','ValidacionIps');

    function beforeFilter() {
        parent::beforeFilter();

        // Aplico el Layout segun la Vista o si es AJAX
        /*
        if ($this->RequestHandler->isAjax()) {
            $this->layout = 'ajax';
        } else {
            // Cambio la Vista por la del Rol
            $this->layout = strtolower($this->Session->read('VistaActual'));
        }
        */
        // Averiguo si hay notificaciones para mostrar
        /*
          $nombre_controlador = $this->name;
          $nombre_metodo = $this->action ;
          $this->requestAction('/notifications/getNotifications/'.$nombre_controlador);
         */
    }

    function index() {

        $this->layout = strtolower($this->Session->read('VistaActual'));
        $client_id    = $this->Session->read('ClientesUsuarioLogueado.id');
        $user_id      = $this->Session->read('Auth.User.id');


        //---------------------------------------------------------------
        //                                        Valido si puede acceder
        //---------------------------------------------------------------
        $vista_actual = $this->Session->read('VistaActual');
        $this->loadModel('Rol');
        $Rol = $this->Rol->find('first', array( 'conditions' => array( 'Rol.name' => $vista_actual  ), 'recursive' => 0 ));
        $rol_actual = $Rol['Rol']['id'];

        $this->loadModel('ClientsAcceso');
        $Accesos = $this->ClientsAcceso->find('first', array(
                                        'conditions' => array( 
                                            'ClientsAcceso.client_id' => $client_id,
                                            'ClientsAcceso.identificador' => 'carga_turnos',
                                            'ClientsAcceso.rol_id' => $rol_actual )
                                        ));
        if($Accesos['ClientsAcceso']['accede']!=1){
                $this->Session->setFlash(__('Su perfil de usuario, no le permite acceder a esta sección. Consulte con el Administrador.', true), 'default', array('class' => 'error-message'));
                $this->_redirect("/dashboards");
                die();
        }
        //-------------------------------------------- Fin validacion


        $data['credencial']      = '';
        $data['nro_documento']   = '';
        $data['typodocument_id'] = 1;
        
        $errores['credencial']    = '';
        $errores['nro_documento'] = '';

        $Habilitado = '';
        $Existe     = '';

        if (isset($_POST['data'])) {

            $data = $_POST['data'];

            if (!empty($data['credencial']) and !empty($data['nro_documento'])) {

                //----------------------------------------------------------
                //           Busco en la base de afiliados de la obra social
                //----------------------------------------------------------
                $credencial = trim($data['credencial']);
                $data['credencial'] = str_pad($credencial, 12, "0", STR_PAD_LEFT);

                
                $arrValidacion = $this->ValidacionIps->ValidarPaciente($data['credencial'], $data['typodocument_id'], $data['nro_documento'] );

                $Habilitado = $arrValidacion['habilitado']; // true || false;
                $Existe     = $arrValidacion['existe'];     // true || false;
              

                if ($Habilitado and $Existe) {

                    //----------------------------------------------------------------
                    //                                     Es paciente de Epicrisis ??
                    //----------------------------------------------------------------
                    $sql = "select p.id,p.name,p.lastname,p.nro_documento, p.telefono, p.direccion, p.localidad,
                                    t.name as tipodocumento, g.name as gender 
                            from people as p
                                left join typodocuments as t on p.typodocument_id = t.id
                                left join genders as g on p.gender_id = g.id
                            where p.typodocument_id = '{$data['typodocument_id']}' 
                                and p.nro_documento = '{$data['nro_documento']}' 
                            order by lastname ASC,name ASC";

                    $Pacientes = $this->Person->query($sql);
                    //pr($Pacientes);
                    $data['name']      = $data['name2'] = $data['name3'] = $data['telefono'] = '';
                    $data['lastname']  = $data['lastname2'] = $data['lastname3'] = $data['email'] = '';
                    $data['direccion'] = $data['localidad'] = '';
                    $data['provincia'] = 'Misiones';

                   if(count($Pacientes)>0){
                        $this->set('Pacientes', $Pacientes);                       
                        $this->set('data', $data);                       
                        $this->render('elegirpaciente');
                    } else {
                        //-------------------------------- Obtiene los tipos de documento
                        $Typodocuments = $this->Typodocument->find('all');
                        $this->set('Typodocuments', $Typodocuments);

                        $genders = $this->Person->Gender->find('list');
                        $sexes = $this->Person->Sex->find('list');
                        $gruposanguineos = $this->Person->Gruposanguineo->find('list');
                        $this->set(compact('genders', 'sexes', 'gruposanguineos'));

                       
                        $data['habilitado'] = true;
                        $data['lastname']   = $arrValidacion['datos_socio']['apellido'];
                        $data['name']       = $arrValidacion['datos_socio']['nombre'];
                        $data['fecha_nac']  = $arrValidacion['datos_socio']['fecha_nac'];

                        $data['gender_id']  = $arrValidacion['datos_socio']['gender_id'];
                        $data['sex_id']     = $arrValidacion['datos_socio']['sex_id'];

                        $this->set('data', $data);      

                        $this->render('pacientenuevo');
                    }                    
                    
                } 

            } else {
                
                $errores['credencial']    = empty($data['credencial']) ? 'Debe ingresar El Nro.de Credencial' : '';
                $errores['nro_documento'] = empty($data['documento']) ? 'Debe ingresar El Nro.de Documento' : '';

            }
        }
        
        $this->set('errores', $this->_formateaerrores($errores));

        //-------------------------------- Obtiene los tipos de documento
        $Typodocuments = $this->Typodocument->find('all');
        $this->set('Typodocuments', $Typodocuments);

        $this->set('Habilitado', $Habilitado);
        $this->set('Existe', $Existe);

        $this->set('data', $data);
    }

    
    function pacientenuevo($credencial='',$typodocument_id='',$nro_documento=''){
        
        $this->_accede('carga_turnos');
        $this->layout = strtolower($this->Session->read('VistaActual'));
        $client_id    = $this->Session->read('ClientesUsuarioLogueado.id');
        $user_id      = $this->Session->read('Auth.User.id');

        if (isset($_POST['data'])) {
            $data = $_POST['data'];

            
            // Valido los datos del post y si hay errores genero los mensajes
            $errores['name']              = empty($data['name']) ? 'Debe ingresar el nombre' : '';
            $errores['lastname']          = empty($data['lastname']) ? 'Debe ingresar el apellido' : '';
            $errores['gender_id']         = empty($data['gender_id']) ? 'Debe ingresar el género' : '';
            $errores['sex_id']            = empty($data['sex_id']) ? 'Debe ingresar el Sexo' : '';
            $errores['direccion']         = empty($data['direccion']) ? 'Debe ingresar el Domicilio' : '';
            $errores['localidad']         = empty($data['localidad']) ? 'Debe ingresar la Localidad' : '';
            $errores['provincia']         = empty($data['provincia']) ? 'Debe ingresar la Provincia' : '';
            $errores['credencial']        = empty($data['credencial']) ? 'Debe ingresar El Nro.de Credencial' : '';
            $errores['nro_documento']     = empty($data['nro_documento']) ? 'Debe ingresar El Nro.de Documento' : '';


            $this->set('errores', $this->_formateaerrores($errores));

            $hay_errores = false;
            foreach ($errores as $k => $v) {
                if (!empty($v)) {
                    $hay_errores = true;
                    break;
                }
            }

            if ($hay_errores) {
                
                $Typodocuments = $this->Typodocument->find('all');
                $this->set('Typodocuments', $Typodocuments);

                $genders         = $this->Person->Gender->find('list');
                $sexes           = $this->Person->Sex->find('list');
                $gruposanguineos = $this->Person->Gruposanguineo->find('list');
                $data['fecha_nac']['dia'] = $data['dia_nac'];
                $data['fecha_nac']['mes'] = $data['mes_nac'];
                $data['fecha_nac']['ano'] = $data['ano_nac'];
                $this->set(compact('genders', 'sexes', 'gruposanguineos'));
                $this->set('data', $data);
                $this->render('pacientenuevo');

            } else {

                //-------------------------------------------------------
                //              No hay errores, grabo este nuevo paciente
                //-------------------------------------------------------
                $nro_afiliado = $data['credencial'];

                $data['id']               = 0;
                $data['stateperson_id']   = 1;
                $data['fecha_nacimiento'] = $data['ano_nac'] . '-' . $data['mes_nac'] . '-' . $data['dia_nac'];
                $data['nro_documento']    = $data['nro_documento'];
                $data['user_id']          = $user_id;

                $ok = $this->Person->save($data);
                
                if ($ok) {
                    $paciente_id = $this->Person->getLastInsertID();

                    //--------------------------------------------------------
                    //                         Grabo relacion client->paciente 
                    //--------------------------------------------------------
                    $ClientsPerson['id']        = 0;
                    $ClientsPerson['client_id'] = $client_id;
                    $ClientsPerson['person_id'] = $paciente_id;
                    $ok = $this->ClientsPerson->save($ClientsPerson);


                    //--------------------------------------------------------
                    //                               Asigno el nro.de afiliado
                    //--------------------------------------------------------
                    $InsurancePeople['id']           = 0;
                    $InsurancePeople['insurance_id'] = 1; //Traditum
                    $InsurancePeople['person_id']    = $paciente_id;
                    $InsurancePeople['nombre_plan']  = 'Traditum';
                    $InsurancePeople['nro_afiliado'] = $nro_afiliado;
                    $ok = $this->InsurancesPerson->save($InsurancePeople);
                    if ($ok) {
                        //-------- Continuo con la seleccion del medico o especialidad                        
                        $this->redirect('/ingresos/medico_especialidad/'.$paciente_id.'/'.$nro_afiliado);
                        die();    
                    }
                }

                if (!$ok) {
                    // hubo errores al guardar!
                    echo "Error";
                    $Typodocuments = $this->Typodocument->find('all');
                    $this->set('Typodocuments', $Typodocuments);

                    $genders         = $this->Person->Gender->find('list');
                    $sexes           = $this->Person->Sex->find('list');
                    $gruposanguineos = $this->Person->Gruposanguineo->find('list');
                    $this->set(compact('genders', 'sexes', 'gruposanguineos'));
                    $this->set('data', $data);
                    $this->render('pacientenuevo');
                    
                }
            }
            
            
        } else {
            //--------- Viene del link del boton del listado de pacientes
            if(empty($credencial) and empty($nro_documento)){
                $this->redirect('/ingresos/');
                die();
            }
            $data['credencial']      = $credencial;
            $data['typodocument_id'] = $typodocument_id;
            $data['nro_documento']   = $nro_documento;
            $data['name']      = $data['name2'] = $data['name3'] = $data['telefono'] = '';
            $data['lastname']  = $data['lastname2'] = $data['lastname3'] = $data['email'] = '';
            $data['direccion'] = $data['localidad'] = '';
            $data['provincia'] = 'Misiones';
            
            $errores = array();
            
        }    
        
            
        $this->set('errores', $this->_formateaerrores($errores));

        //-------------------------------- Obtiene los tipos de documento
        $Typodocuments = $this->Typodocument->find('all');
        $this->set('Typodocuments', $Typodocuments);
        $genders         = $this->Person->Gender->find('list');
        $sexes           = $this->Person->Sex->find('list');
        $gruposanguineos = $this->Person->Gruposanguineo->find('list');
        $this->set(compact('genders', 'sexes', 'gruposanguineos'));

        $this->set('data', $data);

    }
    
    
    

    function medico_especialidad($paciente_id='',$nro_afiliado='',$agenda_id=0) {

        $this->_accede('carga_turnos');


        //-----------------------------------------------
        //                 obtiene los datos del paciente
        //-----------------------------------------------
        $sql = "select p.id,p.name,p.lastname,p.nro_documento
                from people as p
                where p.id = '$paciente_id' LIMIT 1";
        $Paciente = $this->Person->query($sql);

        if(!$Paciente){
            $this->redirect('/ingresos');
            die();
        }

        //------------------------------------------------
        //                  Tiene asignado esa credencial?
        //------------------------------------------------
        $sql = "select * from insurances_people as ip where person_id='$paciente_id' and nro_afiliado='$nro_afiliado' limit 1";
        $x   = $this->InsurancesPerson->query($sql);
        if(!$x){
            //--------------------------------------------------------
            //                               Asigno el nro.de afiliado
            //--------------------------------------------------------
            $InsurancePeople['id']           = 0;
            $InsurancePeople['insurance_id'] = 1; //Traditum
            $InsurancePeople['person_id']    = $paciente_id;
            $InsurancePeople['nombre_plan']  = 'Traditum';
            $InsurancePeople['nro_afiliado'] = $nro_afiliado;
            $ok = $this->InsurancesPerson->save($InsurancePeople);
                
        } 
        $Paciente['0']['ip']['nro_afiliado'] = $nro_afiliado;

        $this->set('Paciente',$Paciente[0]);


        //----------------------------------------------------------------------
        //              Guardo los datos del paciente seleccionado para el turno
        //----------------------------------------------------------------------
        $PacienteSeleccionado['id']            = $Paciente[0]['p']['id'];
        $PacienteSeleccionado['name']          = $Paciente[0]['p']['name'].' '.$Paciente[0]['p']['lastname'];
        $PacienteSeleccionado['nro_documento'] = $Paciente[0]['p']['nro_documento'];
        $PacienteSeleccionado['nro_afiliado']  = $Paciente[0]['ip']['nro_afiliado'];
        $this->Session->write('PacienteSeleccionado', $PacienteSeleccionado);        


        $this->layout = strtolower($this->Session->read('VistaActual'));
        $client_id    = $this->Session->read('ClientesUsuarioLogueado.id');
        $user_id      = $this->Session->read('Auth.User.id');
        $sucursal_id  = $this->Session->read('Sucursal.id');
        $this->set('user_id',$user_id);
        $this->set('client_id',$client_id);



        //-------- Obtengo las especialdades de la sucursal
        $Especialidades = $this->Specialty->AgendasPorEspecialidad($sucursal_id);
        //pr($Especialidades);


        //-------- Obtengo los medicos y agendas de esta sucursal
        $Medicos = $this->User->AgendasDeMedicosQueAtiendenHoy($sucursal_id);


        $this->set('paciente_id',$paciente_id);
        $this->set('nro_afiliado',$nro_afiliado);
        $this->set('Medicos',$Medicos);
        $this->set('Especialidades',$Especialidades);
        
        if($agenda_id>0){
            //--------------------------------------------------------
            //          Ya tengo seleccionada una agenda para el turno
            //--------------------------------------------------------
            $Agenda = $this->Agenda->read(null,$agenda_id);
            if(!$Agenda){
                $this->redirect('/ingresos');
                die();
            }
            $Productos = $this->Product->ObtieneProductos($sucursal_id, $Agenda['Agenda']['user_id'], $Agenda['Agenda']['specialty_id']);
            $this->set('medico_id',$Agenda['Agenda']['user_id']);            
            $this->set('specialty_id',$Agenda['Agenda']['specialty_id']);            

        } else {
            $Productos = false;

        }

        $this->set('agenda_id',$agenda_id);
        $this->set('Productos',$Productos);
        
    }

    
    
    
    function agendar_turno(){
        $this->_accede('carga_turnos');
        
        $client_id    = $this->Session->read('ClientesUsuarioLogueado.id');
        $user_id      = $this->Session->read('Auth.User.id');
        $sucursal_id  = $this->Session->read('Sucursal.id');

        $Turno = $_POST;
        /* Vienen por post
         $Turno[specialty_id] => 1
         $Turno[doctor_id] => 0
         $Turno[agenda_id] => 4
         $Turno[person_id] => 1
         $Turno[producto_id] => 1
        */

         $ahora = date("Y-m-d H:i:s");

        $Turno['id']           = 0;
        $Turno['client_id']    = $client_id;
        $Turno['user_id']      = $user_id;
        $Turno['sucursal_id']  = $sucursal_id;
        $Turno['fecha']        = $ahora;
        $Turno['sobreturno']   = 'N';
        $Turno['nota_json']    = '';
        $Turno['orden']        = 99;
        $Turno['nota']         = '';
        $Turno['stateturn_id'] = 2;
        $Turno['staterecord_id'] = 1;
        $Turno['turno_web']    = 'N';
        $Turno['hora_llegada'] = $ahora;
        $Turno['confirm']      = $ahora;
        $Turno['created']      = $ahora;
        $Turno['modified']     = $ahora;

        $this->Turn->save($Turno);

        $this->redirect('/ingresos/');
        die();
      


    }
    
    
    
    function _formateaerrores($errores) {
        //-------------------- Formatea los errores
        foreach ($errores as $k => $v) {
            if (!empty($v)) {
                $errores[$k] = "<div class='input_error'>$v</div>";
            }
        }
        return $errores;
    }

}

?>